﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JeuDeDames
{
    public static class JeuDeDames
    {

        public const int BLANC = -1;
        public const int NOIR = 1;

        static void Main(string[] args)
        {
            Console.SetWindowSize(80, 40);  //taille de la fenetre
            Console.BackgroundColor = ConsoleColor.White;   //couleur du fond de la console
            Console.ForegroundColor = ConsoleColor.Black;   //couleur des caractères

            bool isMenuTest = false;

            /*Menu de jeu : mode NORMAL*/

            Damier jeu = new Damier();
            jeu = jeu.menu(ref isMenuTest);

            if (!(isMenuTest == true))
            {
                jeu.afficheDamier();
                Console.WriteLine("\n");
                int i = 0;
                while (i < 200)
                {
                    jeu.jouerUnTour();
                    jeu.afficheDamier();
                    i++;
                }
            }
            else
            {
                /*Menu de jeu : zone de test*/
                /*Gere le choix du plateau de jeu personnalisé*/

                jeu.afficheDamier();
                //test.afficheDamier();
                Console.WriteLine("\n\nInitialisation du damier:\n");

                /* demande a l'utilisateur le nombre de pièce qu'il shouaite placer */
                int pieceNoir = 0;
                int pieceBlanche = 0;
                int indiceCaseChoisiPionNoir = 0;
                int indiceCaseChoisiPionBlanc = 0;
                bool verif = false;

                while (verif == false)
                {
                    try
                    {
                        Console.Write("\tChoix du nombre de pièce\n");
                        Console.Write("Entrez le nombre de pions noir voulu :\n ");
                        string nbPieceNoirChoisie = Console.ReadLine();
                        pieceNoir = int.Parse(nbPieceNoirChoisie);
                    }
                    catch (FormatException) { }
                    if (pieceNoir != 0)
                    {
                        verif = true;
                    }
                }

                verif = false;

                while (verif == false)
                {
                    try
                    {
                        Console.Write("Entrez le nombre de pions blanc voulu :\n ");
                        string nbPieceBlancheChoisie = Console.ReadLine();
                        pieceBlanche = int.Parse(nbPieceBlancheChoisie);
                    }
                    catch (FormatException) { }
                    if (pieceBlanche != 0)
                    {
                        verif = true;
                    }
                }

                /* demande a l'utilisateur ou veut il placer ses pions - initialiser le plateau de jeu - */
                for (int i = 0; i < pieceNoir; i++)
                {
                    Console.Write("Placement du pion noir n°" + i + ": veuillez indiquer la case :\n ");
                    string casePionNoirChoisi = Console.ReadLine();
                    indiceCaseChoisiPionNoir = Humain.indiceTransformeur(casePionNoirChoisi);

                    if (indiceCaseChoisiPionNoir > 0 && indiceCaseChoisiPionNoir < 144 && Damier.damier[indiceCaseChoisiPionNoir] is CaseNoire && (Damier.damier[indiceCaseChoisiPionNoir] as CaseNoire).estVide())
                    {
                        /*ajoute la piece à chaque fois sur le damier */
                        Piece unPion = new Pion(indiceCaseChoisiPionNoir, jeu.j2);
                        Damier.damier[indiceCaseChoisiPionNoir] = new CaseNoire(indiceCaseChoisiPionNoir, unPion);
                        jeu.j2.lesPieces.Add(unPion);
                        jeu.afficheDamier();
                    }
                    else
                    {
                        Console.WriteLine("Ce n'est pas une case valide, try again !\n");
                        i--;
                    }
                }
                for (int j = 0; j < pieceBlanche; j++)
                {
                    Console.Write("Placement du pion blanc n°" + j + ": veuillez indiquer la case :\n ");
                    string casePionBlancChoisi = Console.ReadLine();
                    indiceCaseChoisiPionBlanc = Humain.indiceTransformeur(casePionBlancChoisi);

                    if (indiceCaseChoisiPionBlanc > 0 && indiceCaseChoisiPionBlanc < 144 && Damier.damier[indiceCaseChoisiPionBlanc] is CaseNoire && (Damier.damier[indiceCaseChoisiPionBlanc] as CaseNoire).estVide())
                    {
                        Piece unPion = new Pion(indiceCaseChoisiPionBlanc, jeu.j1);
                        Damier.damier[indiceCaseChoisiPionBlanc] = new CaseNoire(indiceCaseChoisiPionBlanc, unPion);
                        jeu.j1.lesPieces.Add(unPion);
                        jeu.afficheDamier();
                    }
                    else
                    {
                        Console.WriteLine("Ce n'est pas une case valide, try again !\n");
                        j--;
                    }
                }

                Console.WriteLine("\n");
                int k = 0;
                while (jeu.finPartie() == false)
                {
                    jeu.jouerUnTour();
                    jeu.afficheDamier();
                    k++;
                }
                Console.WriteLine("\n\nLa Partie est terminée");
                Console.ReadKey();

            }
        }
    }
}